from libs.yuntongxun.sms import CCP
from celery_tasks.main import app
import logging
logger = logging.getLogger('django')

# 任务
#  1. 为了解耦我们把任务放到其他包中,其他包中的文件名必须是 tasks
#  2. 所谓的任务其实就是普通的函数
#  3. 这个函数 必须要被celery的实例对象的task装饰器装饰
#  4. 这个任务要被celery自动检测到,celery就是自动检测 tasks文件
# [ 元素 ]
# 元素: 任务包的路径

# @app.task
# def send_sms_code(mobile, sms_code):
#     CCP().send_template_sms(mobile, [sms_code, 5], 1)

@app.task(bind=True, name='send_sms_code', retry_backoff=3)
def send_sms_code(self, mobile, sms_code):
    """
    发送短信异步任务
    :param mobile: 手机号
    :param sms_code: 短信验证码
    :return: 成功0 或 失败-1
    """
    try:
        send_ret = CCP().send_template_sms(mobile, [sms_code, 5], 1)
    except Exception as e:
        logger.error(e)
        # 有异常自动重试三次
        raise self.retry(exc=e, max_retries=3)
    if send_ret != 0:
        # 有异常自动重试三次
        raise self.retry(exc=Exception('发送短信失败'), max_retries=3)

    return send_ret